package com.sc.test.animation;

import android.animation.ValueAnimator;
import android.os.Bundle;
import android.view.animation.OvershootInterpolator;
import android.widget.Button;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.sc.test.R;

import butterknife.BindView;
import butterknife.ButterKnife;

public class AnimationActivity extends AppCompatActivity {
    @BindView(R.id.bt_animation)
    Button btAnimation;
    private ValueAnimator animator;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);

        ButterKnife.bind(this);

        animator = ValueAnimator.ofInt(0, -15, 0, 15, 0, -5, 0, 5, 0);
        animator.setDuration(1000);
//        当动画到达结尾，<code>repeatCount</code>为INFINITE或正值时，动画从开始重新启动。
//        public static final int RESTART = 1;
//        当动画到达终点，<code>repeatCount</code>为INFINITE或正值时，动画在每次迭代中都反向。
//        public static final int REVERSE = 2;
//        这个值与{@link#setRepeatCount(int)}属性一起使用，以无限期地重复动画。
//        public static final int INFINITE = -1;

        animator.setRepeatMode(ValueAnimator.REVERSE);
        animator.setRepeatCount(ValueAnimator.INFINITE);

//        android:interpolator="@android:anim/accelerate_interpolator" 设置动画为加速动画(动画播放中越来越快)
//        android:interpolator="@android:anim/decelerate_interpolator" 设置动画为减速动画(动画播放中越来越慢)
//        android:interpolator="@android:anim/accelerate_decelerate_interpolator" 设置动画为先加速在减速(开始速度最快 逐渐减慢)
//        android:interpolator="@android:anim/anticipate_interpolator" 先反向执行一段，然后再加速反向回来（相当于我们弹簧，先反向压缩一小段，然后在加速弹出）
//        android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段，然后加速反向回来，执行完毕自带回弹效果（更形象的弹簧效果）
//        android:interpolator="@android:anim/bounce_interpolator" 执行完毕之后会回弹跳跃几段（相当于我们高空掉下一颗皮球，到地面是会跳动几下）
//        android:interpolator="@android:anim/cycle_interpolator" 循环，动画循环一定次数，值的改变为一正弦函数：Math.sin(2* mCycles* Math.PI* input)
//        android:interpolator="@android:anim/linear_interpolator" 线性均匀改变
//        android:interpolator="@android:anim/overshoot_interpolator" 加速执行，结束之后回弹

//        animation.setInterpolator(new AccelerateInterpolator());
//        animation.setInterpolator(new DecelerateInterpolator());
//        animation.setInterpolator(new AccelerateDecelerateInterpolator());
//        animation.setInterpolator(new AnticipateInterpolator());
//        animation.setInterpolator(new AnticipateOvershootInterpolator());
//        animation.setInterpolator(new BounceInterpolator());
//        animation.setInterpolator(new CycleInterpolator(2));
//        animation.setInterpolator(new LinearInterpolator());
//        animation.setInterpolator(new OvershootInterpolator());
        //加速动画
        animator.setInterpolator(new OvershootInterpolator());

        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                btAnimation.setRotation((int) animation.getAnimatedValue());
                int i = (int) animation.getAnimatedValue();
                System.out.println(i);
            }
        });
        animator.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        animator.cancel();
    }
}
